package com.lyy.polymorphic.polyparameter;


/**
 * @Author:  GZQ
 * @date:  2024/11/20 21:55
 * @description: 多态参数 -- 测试类
 * 多态参数： 方法定义的形参类型是父类类型，实际参数类型允许是子类类型
 */

public class PolyParameter {
    public static void main(String[] args) {

        Worker tom = new Worker("tom", 5000);
        Manager jack = new Manager("jack", 10000, 5000);
        PolyParameter p = new PolyParameter();
        p.showEmpAnnual(tom);
        p.showEmpAnnual(jack);
        System.out.println("===========================");
        p.testWork(tom);
        p.testWork(jack);
    }

    // showEmpAnnual(Employee e)
    // 实现获取任何员工对象年工资, 并在main方法中调用该方法 [e.getAnnual()]
    public void showEmpAnnual(Employee e) {
        System.out.println(e.getAnnual()); // 动态绑定机制
    }

    // 添加一个方法，testWork, 如果是普通员工, 则调用work方法，如果是经理，调用manage方法
    public void testWork(Employee e) {
        if (e instanceof Worker) {
            ((Worker) e).work(); // 向下转型的操作
        } else if (e instanceof Manager) {
            ((Manager) e).manage();
        } else {
            System.out.println("不做处理...");
        }
    }
}
